package com.leaf.spring.y201906.day20.listener;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.GenericApplicationListener;
import org.springframework.core.ResolvableType;
import org.springframework.stereotype.Component;

/**
 * 自定义监听器实现
 * 
 * @Title:
 * @Description:
 * @Author: leaf
 * @Since:2019年6月20日
 * @Version:1.1.0
 */
@Component
public class LeafListener implements GenericApplicationListener {

	// publishEvent(new ContextRefreshedEvent(this));
	// getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType);
	@Override
	public void onApplicationEvent(ApplicationEvent event) {

		System.out.println("=============================" + event.getSource());

	}

	/**
	 * 优先级，数字越小，优先级越高
	 */
	@Override
	public int getOrder() {
		return 0;
	}

	// org.springframework.context.event.AbstractApplicationEventMulticaster.supportsEvent(Class<?>, ResolvableType)
	/**
	 * 确定此监听器是否实际支持给定的事件类型。
	 */
	@Override
	public boolean supportsEventType(ResolvableType eventType) {

		// 此处可以添加对指定的事件类型处理
		System.out.println(">>>" + eventType.getType());

		return true;
	}

	/**
	 * 确定此监听器是否实际支持给定的源类型。
	 */
	@Override
	public boolean supportsSourceType(Class<?> sourceType) {
		
		System.out.println(">>>===" + sourceType.getName());
		
		return true;
	}

}
